import { compileToFunction } from './compiler'
import { mountComponent } from './lifecycle'
import {initState} from './state'
export function initMixin(Vue){ // 给Vue增加方法
  Vue.prototype._init = function (options) { // 初始化方法
    // vm.$options vue 全局保存options
    const vm = this
    vm.$options = options

    //初始化状态
    initState(vm)

    if(options.el){
      vm.$mount(options.el)
    }
  }

  Vue.prototype.$mount = function(el){
    const vm = this;
    let opts = vm.$options
    el = document.querySelector(el)
    if(!opts.render){ // 先查找有没有render函数
      let template
      if(!opts.template && el){ // 没有写模板 但是写了el
         template = el.outerHTML
      }else{
        if(el){
          template = opts.template
        }
      }

      // 写了template就用template
      if(template){
        // 需要对模板编译
        const render = compileToFunction(template)
        opts.render = render
      }
    }

    mountComponent(vm,el); // 组件的挂载
  }
  
}